package opgave1;

/**
 * @author Andre Baart en Jeroen Castelein
 * @elementen 
 * 		Elementen van het type Identifier
 * @structuur
 * 		Geen
 * @domein
 * 		Alle verzamelingen waarvoor geldt dat ze 0 - 20 verzamelingen bevatten
 * @constructor
 * 		Verzameling();
 * 			<dl>
 * 				<dt><b>PRE-conditie</b><dd>-
 * 				<dt><b>POST-conditie</b><dd>De inhoud van het nieuwe Verzameling-object is leeg.
 * 			</dl>
 * 		<br>
 * 		Verzameling (Verzameling src);
 * 			<dl>
 * 				<dt><b>PRE-conditie</b><dd>-
 * 				<dt><b>POST-conditie</b><dd>De inhoud van het nieuwe Verzameling-object is een kopie van src.
 * 			</dl>
 **/

public interface VerzamelingInterface {

	public static final int MAXIMUM_SIZE = 20;
	
	/** Initialiseert het Verzameling object tot de lege verzameling.
     * @preconditie
     *	    -
     * @postconditie
     *	    De verzameling is leeg.
     **/
	void init ();
	
	/** Voegt een kopie van het meegegeven Identifier object toe aan de verzameling.
     * @preconditie
     *	    Er zitten minder dan 20 Identifiers in de verzameling, of de meegegeven Identifier zit al in de verzameling
     * @postconditie
     *	    Een kopie van het meegegeven Identifier zit in de verzameling.
     **/
	void add (Identifier ident);
	
	/** Retourneert een kopie van een Identifier die op een willekeurige plek in de verzameling staat en deze Identifier wordt uit de verzameling verwijderd.
     * @preconditie
     *	    De verzameling is niet leeg.
     * @postconditie
     *	    Een kopie van een Identifier op een willekeurige plek in de verzameling is geretourneerd en verwijderd uit de verzameling.
     **/
	Identifier take ();
	
	/** Geeft het aantal Identifiers in de verzameling.
     * @preconditie
     *	    -
     * @postconditie
     *	    Het aantal Identifiers in de verzameling is geretourneerd.
     **/
	int size ();
	
	/** Retourneert of de meegegeven Identifier voorkomt in de verzameling.
     * @preconditie
     *	    -
     * @postconditie
     *	   	True - De meegegeven Identifier komt in de verzameling voor
     *		False - De meegegeven Identifier komt niet in de verzameling voor
     **/	
	boolean contains(Identifier ident);
	
	/** Retourneert een nieuwe verzameling met daarin de elementen die wel in de interne verzameling zitten maar niet in de meegegeven verzameling.
     * @preconditie
     *	    -
     * @postconditie
     *	   	Een nieuwe verzameling met daarin de elementen die wel in de interne verzameling zitten maar niet in de meegegeven verzameling is geretourneerd.
     **/
	Verzameling verschil(Verzameling verz2);
	
	/** Retourneert een nieuwe verzameling met daarin de elementen die in beide verzamelingen zitten.
     * @preconditie
     *	    -
     * @postconditie
     *	   	Een nieuwe verzameling met daarin de elementen die in beide verzamelingen zitten is geretourneerd.
     **/
	Verzameling doorsnede(Verzameling verz2);
	
	/** Retourneert een nieuwe verzameling met daarin alle elementen van beide verzamelingen.
     * @preconditie
     *	    De som van de elementen min het aantal elementen in de doorsnede is kleiner of gelijk aan 20.
     * @postconditie
     *	   	Een nieuwe verzameling met daarin alle elementen van beide verzamelingen is geretourneerd.
     **/
	Verzameling vereniging(Verzameling verz2);
	
	/** Retourneert een nieuwe verzameling met daarin alle elementen van beide verzamelingen die niet in de doorsnede zitten.
     * @preconditie
     *	    -
     * @postconditie
     *	   	Een nieuwe verzameling met daarin alle elementen van beide verzamelingen die niet in de doorsnede zitten is geretourneerd.
     **/
	Verzameling symvers(Verzameling verz2);
}
